簡體   English   中英

關系數據庫設計(MySQL)

[英]Relational Database Design (MySQL)

我現在正在為基於“Talents”的應用程序設計我的數據庫,例如:

  • 楷模
  • 演員
  • 歌手
  • 舞者
  • 音樂家

我昨天開始提出類似的問題並從回復中取得了一些進展,但我認為現在開始一個新問題會更容易。 所以這就是我現在所擁有的:

Table talent:

- id
- name

Table subtalent:

- id
- name
- talent_id (FK)

Table user:

- id
- name

在網站上注冊的任何用戶都可以為這些人才中的一個或多個創建個人資料。 一個人才可以擁有次級天賦,例如演員可以是電視演員或戲劇演員或畫外音演員。

現在我需要知道以下內容的答案:

1)我應該如何存儲用戶擁有的人才和子才能。 我假設還需要兩個表(talent_user和subtalent_user)?

2)用戶可以指定他們擁有的每個TOP LEVEL人才的具體信息。 每個人才的字段會有所不同所以我認為這需要另一組表格? 如何將這些鏈接到用戶記錄,即外鍵是什么?

你是否需要擁有一個亞人才子? IE瀏覽器。 在某種情況下,你可以擁有許多不同層次的人才,其中父母的人才有子才,但父母是另一個人才的子能力。 哇,多數民眾贊成! :)

在這種情況下,您將使用自引用表。 如下

Table:Talents

 - TalentID
 - ParentTalentID (References TalentID column, NULL if this Talent is a top level)
 - Name

然后,您可以根據需要添加任意數量的子類別。

然后,您需要一個加入表,因為用戶可以擁有許多人才,而且人才可以屬於許多用戶。

Table:UserTalents

 - TalentID (Fk)
 - UserID (Fk)

Table:Users

 - UserID (Pk)
 - Name
  • 廢棄Subtalent。 人才是一個等級人才 - (ParentTalent字段)。 允許任意深度。

  • 您需要一個UserTalent表,將用戶鏈接到人才表中的條目。

1)我同意。

Table talent_user:
- id
- user_id
- talent_id


Table subtalent_user:
- id
- user_id
- subtalent_id

2)我認為答案取決於幾個因素。 如果你確切地知道不同形式對於不同的天賦會是什么,我會保持簡單(如“不要太認真”)並為你將擁有的每種不同類型的表格創建一個表格。 否則,您可能只想為所有表單創建一個表,並將表單數據保存為XML。 這樣,您可以保留原始表單的結構,而不會使數據庫架構過於復雜。

2)也許你可以使用talent_feature表。 因此,對於每個人才,您可以列出它具有的功能。

 Feature = (id, name, description)
 talent_feature = (id, talent_id, feature_id)

然后您將擁有User_talent_feature,例如:

 user_talent_feature = (user_id, talent_feature_id, possible_further_fields)

這為人才添加新功能提供了很大的靈活性。

1)要么你可以讓每個人都有一個次級,這樣這種關系永遠都是對子的關系。 所以你永遠不會讓一個人只是一個演員,而是一個tv_actor,或者是broadway_actor等。那么你只需要user_subtalent關系。 你總能找到頂級人才。 或者您可以使用其他答案提出的層次結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM