Osobne tabele czy kolumny z nullami?
Piotr 'piter' Hlawski - 24-01-2007 00:01
Osobne tabele czy kolumny z nullami?
Temat dość ogólny, nie związany z bazą. Mam tabelę i w niej atrybut A przyjmujący trzy wartości, które rzutują na pewne inne dane - tzn. jeśli atrybut A przyjmie wartość "x" to atrybut B może przyjmować wartości typu dni tygodnia (pon, wt, śr itd), jeśli A przyjmie wartość "y" to B będzie przyjmował wartości integer w zakresie 1-31, a jeśli A przyjmie wartość "z" to B ma być null. I teraz, czy lepiej zrobić to płasko i A i B trzymać w jednej tabeli, przy czym B rozbić na dwie kolumny (odpowiednio typów: varchar, integer) i wypełniać odpowiednią z nich w zależności od wartości jaka się pojawi w A (nie wypełniać w ogóle gdy A będzie "z") czy może zrobić osobne tablice na te dane?
-- ..:: Piter // phlawski$gmail,com // gg: 4534287 ::. Chuck Norris złapał wszystkie 386 pokemonów w czasie poniżej 2.7 sekundy. Mówi, że za nic nie sprzeda żadnego z nich.
Grzesiek G. - 24-01-2007 00:01
Piotr 'piter' Hlawski napisał(a): > Temat dość ogólny, nie związany z bazą. > Mam tabelę i w niej atrybut A przyjmujący trzy wartości, które rzutują na > pewne inne dane - tzn. jeśli atrybut A przyjmie wartość "x" to atrybut B > może przyjmować wartości typu dni tygodnia (pon, wt, śr itd), jeśli A > przyjmie wartość "y" to B będzie przyjmował wartości integer w zakresie > 1-31, a jeśli A przyjmie wartość "z" to B ma być null. I teraz, czy lepiej > zrobić to płasko i A i B trzymać w jednej tabeli, przy czym B rozbić na > dwie kolumny (odpowiednio typów: varchar, integer) i wypełniać odpowiednią > z nich w zależności od wartości jaka się pojawi w A (nie wypełniać w ogóle > gdy A będzie "z") czy może zrobić osobne tablice na te dane? >
Jak zapewne wiesz (bo się pytasz :-), każde z rozwiązań ma zalety lub wady. Zrobienie osobnych tablic będzie bardziej uniwersalne i otwarte na rozbudowę typu jeśli A przyjmie q to b powinno być listą liczb. Ale nastawiając się za bardzo na rozbudowę, która nigdy nie nastąpi powiększa się niepotrzebnie koszty.
Na pewno nie mnożyłbym kolumny B dla każdego możliwego typu. Raczej poszedłbym w kierunku, że B jest zawsze znakowa, a A określa typ. Walidację B można przeprowadzić na kliencie lub trigerem, a ewentualne udostępnianie B jako daty liczby itp. przez kolumnę wyliczaną.
Pozdrawiam
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
Piotr 'piter' Hlawski - 24-01-2007 00:01
Grzesiek G. wrote:
> Piotr 'piter' Hlawski napisał(a): >> Temat dość ogólny, nie związany z bazą. >> Mam tabelę i w niej atrybut A przyjmujący trzy wartości, które rzutują na >> pewne inne dane - tzn. jeśli atrybut A przyjmie wartość "x" to atrybut B >> może przyjmować wartości typu dni tygodnia (pon, wt, śr itd), jeśli A >> przyjmie wartość "y" to B będzie przyjmował wartości integer w zakresie >> 1-31, a jeśli A przyjmie wartość "z" to B ma być null. I teraz, czy >> lepiej zrobić to płasko i A i B trzymać w jednej tabeli, przy czym B >> rozbić na dwie kolumny (odpowiednio typów: varchar, integer) i wypełniać >> odpowiednią z nich w zależności od wartości jaka się pojawi w A (nie >> wypełniać w ogóle gdy A będzie "z") czy może zrobić osobne tablice na te >> dane? >> > > Jak zapewne wiesz (bo się pytasz :-), każde z rozwiązań ma zalety lub > wady. Zrobienie osobnych tablic będzie bardziej uniwersalne i otwarte na > rozbudowę typu jeśli A przyjmie q to b powinno być listą liczb. Ale > nastawiając się za bardzo na rozbudowę, która nigdy nie nastąpi > powiększa się niepotrzebnie koszty. > > Na pewno nie mnożyłbym kolumny B dla każdego możliwego typu. Raczej > poszedłbym w kierunku, że B jest zawsze znakowa, a A określa typ. > Walidację B można przeprowadzić na kliencie lub trigerem, a ewentualne > udostępnianie B jako daty liczby itp. przez kolumnę wyliczaną. >
Dzięki, tak właśnie zrobię. Nie będzie silnej rozbudowy, także to co proponujesz jednak wystarczy.
-- ..:: Piter // phlawski$gmail,com // gg: 4534287 ::. Chuck Norris nie ma przyrodzenia jak koń. konie mają przyrodzenie jak Chuck Norris
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?=
[mysql] =?ISO-8859-2?Q?po=B3=B1czenie_tabel_wg_kolumn=2C_?==?ISO-8859-2?Q?nie_wierszy?=
ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?=
[ORACLE] Dodanie kolumny typu BLOB - =?ISO-8859-2?Q?wp=B3yw_na?==?ISO-8859-2?Q?_wydajno=B6c?=
=?ISO-8859-2?Q?=5BORACLE=2C_ORDER_BY=5D_Czy_indeksowane_?==?I SO-8859-2?Q?kolumny_przy=B6piesz=B1_sortowanie=3F?=
pytanie o zapytanie z having count = count z innej kolumny
[MySQL/PHP] Wyszukiwanie rekordu przez kolumnę wskazaną przez zmienną
=?iso-8859-2?q?Pytanie_SQL__spe=B3niaj=B1ce_wiecej_jak_jeden_ warunek_na_jednej_kolumnie=2E?=
=?iso-8859-2?Q?=5BMSSQL2005=5D_Zawarto=B6c_kolumny_varbinary= 28max=29_?=
SELECT MAX(nazwaPola) FROM tabela WHERE .... i ORA-01405: pobran? warto?ci? kolumny jest NULL
zanotowane.pldoc.pisz.plpdf.pisz.plautwywalczyl.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|