2011-01-19 10 views
8

Mam tabelę z 25 kolumnami, gdzie 20 kolumn może mieć wartości puste dla niektórych (30-40%) wierszy. Jaki jest koszt posiadania wierszy z 20 pustymi kolumnami? Czy to jest ok?Sql Design Question

Albo

jest to dobry projekt, aby mieć inną tabelę do przechowywania tych 20 kolumn i dodać ref do pierwszej tabeli? W ten sposób zapisuję tylko do drugiej tabeli tylko wtedy, gdy istnieją wartości.

Używam serwera SQL 2005. Zostanie przeniesiony do 2008 roku w przyszłości.

tylko 20 kolumn varchar, smallint reszta, smalldate

Co ja przechowywania: Te kolumny przechowywać różne atrybuty rzędzie do której należy. Te atrybuty czasami mogą mieć wartość zerową.

tabela odbędzie ~ miliardów wierszy

Proszę skomentować.

+6

Z którego serwera bazy danych korzystasz? SQL Server 2008 obsługuje koncepcję rzadkich kolumn, które obsługują twój scenariusz przy minimalnym wpływie. –

+0

Spójrz na tę odpowiedź: http://stackoverflow.com/questions/229179/null-in-mysql-performance-storage/230923#230923 I http://dev.mysql.com/doc/refman/5.0/ pl/working-with-null.html – RobertPitt

+0

Czy rozważałeś dziedziczenie tabeli? –

Odpowiedz

2

Powinieneś opisać typ przechowywanych danych. Wygląda na to, że niektóre z tych kolumn powinny zostać przeniesione do innego stołu.

Na przykład, jeśli masz kilka kolumn, które reprezentują wiele kolumn dla tego samego rodzaju danych, to powiedziałbym przenieść go do innej tabeli Z drugiej strony, jeśli potrzebujesz tego wiele kolumn, aby opisać różne typy danych, wtedy możesz potrzebować zachować go takim, jaki jest.

To zależy od tego, co modelujesz.

+0

+1 za opisanie danych ... Jeśli znamy kolumny, o których mowa, możemy udzielić lepszej porady na temat restrukturyzacji (jeśli jest to konieczne). – scunliffe

+1

Dodano więcej informacji o danych i typie: – kheya

+0

@Projapati: Wydajesz się niechętny do oferowania wielu szczegółów. Mówienie kolumn "przechowuje różne atrybuty wiersza, do którego należy" nie mówi mi nic o typie danych, które przechowujesz. Jeśli chcesz podać kilka przykładów, mogę Ci powiedzieć, co myślę. Ale potrzebowałbym więcej, aby kontynuować. –

2

Czy są okoliczności, w których niektóre z tych kolumn są wymagane? Jeśli tak, to może powinieneś użyć jakiejś formy dziedziczenia. Na przykład, jeśli były to informacje o pacjentach w szpitalu, a były pewne dane, które miały sens jedynie dla kobiet, można utworzyć tabelę FemalePatients z tymi kolumnami. Kolumny, które zawsze muszą być zebrane dla kobiet, mogą być następnie zadeklarowane w tej osobnej tabeli jako NOT NULL.

2

To zależy od typów danych (40 nullable ints będzie w zasadzie zajmować tę samą przestrzeń co 40 nie-nullable int, niezależnie od wartości). W SQL Server przestrzeń jest dość wydajna dzięki zwykłym technikom. W 2008 roku masz funkcję SPARSE.

Jeśli dzielisz tabelę pionowo z opcjonalną relacją 1: 1, istnieje możliwość owijania dwóch tabel widokiem i dodawania wyzwalaczy w widoku, aby uczynić go aktualizowalnym i ukryć podstawową implementację.

Istnieje wiele opcji, z których wiele można wdrożyć po wyświetleniu obciążenia i zachowania danych.

1

Twórz tabele na podstawie różnych zestawów atrybutów, które posiadasz. Więc jeśli masz jakieś dane, w których niektóre z twoich kolumn nie mają zastosowania, to sensowne byłoby posiadanie tych danych w tabeli, która nie ma tych kolumn. O ile to możliwe, unikaj powtarzania tego samego atrybutu w wielu tabelach. Upewnij się, że twoje dane znajdują się w co najmniej Boyce-Codd/5. Normalnej formie i nie popełnisz błędu.