2017-03-19 3 views
0

Wenn ich eine Marktplatz-Datenbank für etwas bestimmtes erstellen würde, sagen wir für Bücher. Ich hätte eine store Tabelle und eine store_books Tabelle, die die Bücher jedes Ladens enthalten würde.Umgang mit Benutzer eingegeben Daten, die für mehrere Benutzer identisch sein können

Nun, wenn es eine hohe Wahrscheinlichkeit von mehreren Geschäften gibt, die genau das gleiche Buch verkaufen, wäre es eine gute Idee, eine weitere Tabelle books mit buchbezogenen Informationen und Preise usw. in der store_book Tabelle zu halten? Ich möchte auch Sprachen hinzufügen, die zwei andere Tabellen book_langs und langs verwenden.

Wo in book_langs Ich habe die lokalisierten Informationen und langs enthält alle unterstützten Sprachen.

Mein Hauptanliegen in diesem Fall ist, dass, wenn ein Geschäft ein neues Buch hinzufügen muss, es den ersten Eintrag in der books Tabelle sowie alle Übersetzungen erstellt, die von allen verwendet werden. Wenn jemand falsch übersetzt, falsch schreibt oder wenn es einfach mehrere Möglichkeiten zum Übersetzen gibt, sagen wir mal einen Titel, dann würde dies ein Durcheinander in der Datenbank bedeuten, da jeder neue Einträge für jedes Buch erstellen würde. Was wäre ein guter Ansatz, um solche Probleme zu lösen? Die Entnormierung der , um den Titel zu enthalten, wäre ein Ansatz, aber ist das der bevorzugte Ansatz?

Bitte nehmen Sie die Bücher als Beispiel. Man könnte argumentieren, dass ein Buch seit seiner Übersetzung einen bestimmten Titel haben muss. Stellen Sie sich das Buch als Platzhalter vor, da ich mir im Moment kein besseres Beispiel vorstellen kann.

Antwort

1

Sie müssen zwischen "Editionen" desselben Buches unterscheiden. Ich würde argumentieren, dass Übersetzungen anders sind Ausgaben und gespeichert zu verkaufen Ausgaben. In Ihrem Fall könnte eine "Ausgabe" einfach eine Kombination aus Buch und Sprache sein. Also, nenne es BookLanguageId.

so etwas wie die folgenden Einrichtungen:

create table Books (
    BookId b int auto_increment primary key, 
    Title varchar(255), 
    . . . 
); 

create table BookLanguages (
    BookLanguageId int auto_increment primary key, 
    BookId int not null, 
    LanguageId int not null, 
    IsPrimaryLanguage tinyint, 
    . . . 
    foreign key (BookId) references Books(BookId), 
    foreign key (LanguageId) references Languages(LanguageId) 
); 


create table StoreBookLanguages (
    StoreBookLanguageId int auto_increment primary key, 
    StoreId not null, 
    BookLanguageId int not null, 
    DateArrived int, 
    foreign key (StoreId) references Stores(StoreId), 
    foreign key (BookLanguageId) references BookLanguages(BookLanguageId) 
); 
Verwandte Themen