2009-07-28 9 views
0

Ich möchte Module wie Kommentar, Bewertung, Tag, etc. zu meinen Entitäten implementieren. Was ich dachte, war:Tag, Kommentar, Bewertung, etc. Datenbank-Design

comments_table -> comment_id, comment_text

entity1 -> entitity1_id, entity1_text

entity2 -> entitity2_id, entity2_text

entity1_comments -> entity1_id, comment_id

entity2_comments -> entity2_id, comment_id

....

Ist dieser Ansatz korrekt?

Antwort

1

Es ist einfacher als das. Sie werden so etwas wollen:

Entity: EntityID EntityText

Kommentare: CommentID AssocEntityID Comment

Wo AssocEntityID einen Fremdschlüssel Bezug auf die Entity Tabelle EntityID Spalte hat.

Für diese Lösung mit allen Kommentare für Entity zu bekommen ID 1, würden Sie dies tun:

SELECT CommentID, CommentText FROM Comments WHERE AssocEntityID = 1 
1

Nein, ich würde vorschlagen, nur eine entity_comments Tabelle aufweist, die eine Kreuzungstabelle zwischen Kommentare und Einheit ist. Sie müssten die IDs entity1 und entity2 in der Tabelle mit den Kommentaren als separate Attribute haben.

so würde es wie folgt aussehen:

entitiy1 -> entity_comments <- comments_table 
entitiy2 -> entity_comments <- comments_table 

eine einfache Auswahl sein könnte:

select text 
    from entity1 
    , entity_comments 
    , comments_table 
    where entity1.id = entity_comments.entity1_id 
    and entity_comments.comment_id = comments_table.id 
+0

Sie sagen, legen Sie zwei Attribute als entity1 ans entity2 Attribute der entitycomments Tabelle. Was ist, wenn ich 10 Entitäten habe? 10 separate Attribute und viele Nullwerte? –

+0

dann müssen Sie möglicherweise Ihre Tabellenstruktur vollständig neu entwerfen. Es würde chaotisch werden, mit jeder neuen Entitätstabelle der Schnittstellentabelle weitere Attribute hinzuzufügen. Wenn es nur einen Kommentar pro Zeile in der Entität gibt, könnten Sie die comments.id in die Tabelle entity1 einfügen und die Schnittstellentabelle weglassen. Die Schnittpunkttabelle ermöglicht mehrere Kommentare pro Entity1-Zeile. – northpole