2010-11-16 10 views

Odpowiedz

13

Nie.

Potrzebna jest do tego kolumna.

Wyobraź sobie, jak duże byłyby metadane, gdybyś musiał zachować zapis dla każdego rekordu do stworzenia! Czy chcesz również zachować metadane na meta-danych, aby wiedzieć, kiedy metadane zostały zaktualizowane? Wykorzystanie przestrzeni może szybko ulec eskalacji.

Serwer SQL przechowuje pewne statystyki, ale coś, co konkretnie musi pochodzić z pola zdefiniowanego przez użytkownika.

Na marginesie, możesz utrudnić manipulowanie datą w stworzonym polu, jeśli korzystasz z tabeli odnośników. Utwórz tabelę "TableName_CreateDate" i użyj PK ze swojej rzeczywistej tabeli i wartości daty. Twoja data znajduje się w oddzielnej lokalizacji i jest mniej prawdopodobne, że zostanie zmieniona, ale nadal możesz uzyskać na niej JOIN, aby otrzymać zamówienie. Będziesz musiał stworzyć wyzwalacz, aby zaktualizować to o nowe wartości.

Jeśli chcesz tylko DATE i nie potrzebujesz wartości datetime, możesz pójść o krok dalej i po prostu mieć tabelę dat i tabelę odnośników, która się do tego przyłącza. Tj .:

Table->Table.PK + Date.Pk -> DateTable

Pozwoliłoby to zaoszczędzić dużo miejsca na dysku, jeśli masz dużo wierszy (4 bajty w rzędzie myślę).

1

Nie, nawet w tabelach systemowych według mojej wiedzy. Można przekopać się przez stare logi transakcji, ale jestem pewien, ale nie.

-4

Jeśli chce tylko zamówić przez niego, można rozważyć użycie kolumny timestamp.

Nie można jej powiązać z datą rzeczywistą, ale można ją posortować.

+1

Może mieć problemy, jeśli chce porównać tabele w dół przy użyciu tej metody. – JNK

+0

no biggie tak długo, jak OP zna wszystkie korzyści i ryzyka. :) – JNK

+0

Aah!Po prostu pomyślałem, że popełniłem błąd w tej odpowiedzi, ale teraz myślę, że nie. Czas do łóżka. W każdym razie, zmodyfikuj go, jeśli nie będzie używał;) – thomaspaulb

4

Należy dodać pole daty utworzenia. Naprawiasz "nadzieję, że nikt ich nie zmieni", dodając wyzwalacz do aktualizacji, który nie pozwala na aktualizację tego pola, nigdy.

0

Kiedyś przyszedłem z sytuacją, w której kolejność rzędów tabeli jest wymagana, ale nie ma kolumny czasowej (CreateDateTime, UpdateDateTime, ... itd.), więc tylko dane, które miałem, były dziennikiem transakcji. Bezpośrednie odczytanie dziennika transakcji nie było pomocne, ponieważ nie jest łatwe do przeanalizowania. Znalazłem program o nazwie "Log ApexSQL", który był bardzo pomocny, posiada wszystkie opcje filtrowania i możesz czytać wszystkie dane dziennika bez poważnych operacji.Tak rozwiązanie to było dla mnie satysfakcjonujące, ma jednak wadę: możesz filtrować tylko datę (czas rozpoczęcia i czas zakończenia) zgodnie z operacją transakcji.Jeśli szukasz operacji zapytania, na przykład wkładki, która jest hermetyzowana w transakcji, nie można pobrać dokładnego czasu wstawiania (przynajmniej nie mogłem znaleźć drogi), tylko czas transakcji. Jeśli twoje operacje są atomowe, możesz literalnie utworzyć wszystkie dane dotyczące daty.

Powiązane problemy