7

Pracuję nad projektem. Jest to głównie do celów edukacyjnych, uważam, rzeczywiście próbując skomplikowany projekt jest najlepszym sposobem na naukę języka po zapoznaniu się z podstawami. Projektowanie baz danych nie jest mocną stroną, zacząłem je czytać, ale jego wczesne dni i nadal się uczę.Struktura bazy danych z dynamicznymi polami

Oto mój schemat alfa, im naprawdę w miejscu, gdzie im po prostu staramy się zanotować wszystko, co mogę myśleć i sprawdzając, czy jakieś problemy wyskoczyć. http://diagrams.seaquail.net/Diagram.aspx?ID=10094#

Niektóre z moich obaw chciałbym zwrotnych na temat:

Wskazówki dla rdzenia atrybuty jak na przykład obszar, powiedzmy dla uproszczenia obszary są kuchnia, sypialnia, ogród, łazienka i pokój dzienny. Dla innego klienta, który może być stroną główną, strona kontaktowa, about_us, ekran powitalny. Może to być 2 obszary i może to być 100, nie ma potrzeby ich ograniczania.

Stworzyłem oddzielne tabele dla wartości domyślnych i każdy jest powiązany z błędem. Później przyszedłem do problemu pól niestandardowych, jeśli ktoś chce na przykład oznaczyć temat, którego dotyczy błąd, nie mamy tego, jest prawdopodobnie 100 innych rzeczy, więc chciałem trzymać się zestawu podstawowych atrybutów i pól niestandardowych dać ludziom elastyczność.

Jednak gdy dotarłem do pól niestandardowych wiedziałem, że mam problem, nie mogę być tworzenie tabeli dla każdego pola niestandardowego więc zamiast stosować 2 tabele. pola niestandardowe i wartości_właściwego pola. Pomysł jest każde pole w tym domyślne zostaną zapisane w tej tabeli i każdy byłby powiązany z tabelą wartości, które po prostu mają coś takiego

custom_fields table 
id   project_id  name 
01   1     area(default) 
12   2     rooms(custom) 
13   4     website(custom) 

custom_field_values table 
id   area   project_id sort_number 
667   area1   1    1 
668   area2   1    2 
669   area3   1    3 
670   area4   1    4 
671   bedroom  2    1 
672   bathroom  2    2 
673   garden   2    3 
674   livingroom  2    4 
675   homepage  4    1 
676   about_us  4    2 
677   contact  4    3 
678   splash page 4    4 

to wygląda skuteczny sposób obsłużyć dynamicznych pól jak ten lub czy są inne alternatywy?

domyślnie będzie ciężko kodowane więc można użyć je lub wymienić na własną rękę lub mogę utworzyć inną tabelę, aby umożliwić użytkownikom edytować nazwy domyślnych, które byłyby związane z ich projektem. Wszelkie opinie są mile widziane i jeśli jest coś bardzo oczywistego w przypadku problemów w programie, prosimy o krytyczną ocenę.

+0

Fuj EAV. Chciałbym rzucić okiem na alternatywę NoSql, gdybym był tobą. –

Odpowiedz

16

Masz na nowo starą antywzorzec projektowy o nazwie Entity-Attribute-Value. Idea niestandardowych pól w tabeli jest logicznie niezgodna z relacyjną bazą danych. Numer relation ma ustaloną liczbę pól.

Ale nawet jeśli nie jest właściwie relacyjny, wciąż musimy zrobić to czasami.

Istnieje kilka metod, aby naśladować niestandardowych pól w SQL, choć większość z nich złamać zasady normalizacji. Dla niektórych przykładach, patrz:

+0

Dziękuję Bill, czy poleciłbyś książkę lub zasób, który wyjaśniłby z przykładami, w jaki sposób mogę przekształcić mój projekt, aby włączyć Dziedziczenie Klasy, nie bardzo rozumiem, co to jest jeszcze i jak zaimplementować go z MySQL, ale zaczynam od razu go czytać, odkąd zasugerował, że jako preferowaną opcją w jednym z postów, do których się przyłączyłem, jeśli istnieje zasób online lub książka, która tłumaczy to nowicjuszowi, chętnie go kupię, jak na razie staram się znaleźć dobre wyjaśnienia lub przykłady. – user1547410

+0

[Patterns of Enterprise Application Architecture] (http://www.martinfowler.com/books/eaa.html) autorstwa Martina Fowlera to najlepsza książka poświęcona dziedziczeniu klas i wielu innych wzorców, które powinieneś wiedzieć. –

+0

dziękuję, wygląda na to, że im bardziej na to patrzę, tym bardziej moja struktura jest dopasowana do bazy danych Nosql, nie używałem jej wcześniej, ale wydaje się, że jest to bardziej logiczny wybór, czy ktoś się nie zgadza? – user1547410