2010-10-27 133 views
4

首先,對不起,如果這可能是一個愚蠢的問題。我很新的MySQL的世界,所以...我應該如何構建我的MySQL數據庫?

無論如何,我的問題是這樣的:我打算有一個數據庫,處理(現在)兩種類型的用戶,比方說管理員用戶。我的目標是擁有一個包含所有用戶的表格,這些用戶名稱恰當地稱爲「用戶」。下面是我的MySQL命令的一個粗略的輪廓(我還沒有測試過這樣的錯誤很可能):

CREATE TABLE users { 
user_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
user_type int NOT NULL REFERENCES user_types(user_type_id), 
ssn  char(10) NOT NULL, 
password varchar(40) NOT NULL, 
first_name varchar(30) NOT NULL, 
last_name varchar(30) NOT NULL, 
address  varchar(80) NOT NULL 
} engine = InnoDB; 

上面的「USER_TYPE」列將參閱「user_types」另一個表,其中列出了不同用戶類型的網站(我對具有在以後添加更多的用戶類型選項的緣故這樣做):

CREATE TABLE user_types { 
    user_type_id  int UNSIGNED NOT NULL PRIMARY KEY, 
    user_type_desc varchar(10) NOT NULL 
} engine = InnoDB; 

INSERT INTO user_types (user_type_id, user_type_desc) VALUES(1,'Admin'),(2,'User'); 

我的目標是用「管理員」鏈接「用戶」;一個「用戶」(孩子)可以有一個「管理員」(父母),但一個「管理員」(父母)可以有幾個「用戶」關聯(子女)。我的目標是創建一個簡單的約會日曆,爲此我需要將用戶與他們的管理員(一對一關係,因爲約會在一個用戶和一個管理員之間)連接。現在的問題是:

1)是否有可能通過爲所有用戶創建一個表來實現這一目標?如果是這樣,我該如何做到這一點?現在我正在考慮創建一個名爲「賦值」的表格:

CREATE TABLE assignments { 
assign_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
patient_id int NOT NULL REFERENCES users(user_id), 
doctor_id int NOT NULL REFERENCES users(user_id) 
} engine = InnoDB; 

但上面的代碼看起來很奇怪,我可以做那種連接到同一張桌子的外鍵沒有任何危險嗎?下面也是SQL「代碼」爲「約會」表:

CREATE TABLE appointments { 
appointment_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
assign_id  int FOREIGN KEY REFERENCES assignments(assign_id), 
date_time  datetime NOT NULL, 
description  varchar(200) NOT NULL 
}; 

也就是說,「管理」和「用戶」之間的「約會」表指向每個條目一定的分配。

2)我怎樣才能以簡單的方式,或更確切地說,實現「管理員」和「用戶」之間的一對多關係?

任何幫助或建議將不勝感激,並抱歉,如果這些問題是愚蠢的!

回答

1

如果您在用戶和管理員之間存在多對多關係,那麼您建議的分配表格將起作用。由於您已將關係描述爲一對多(一個Admin可能有多個用戶),我只需將一個admin_id列添加到您的用戶表中,並將其作爲一個自引用外鍵返回給用戶表。

CREATE TABLE users { 
user_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
user_type int NOT NULL REFERENCES user_types(user_type_id), 
ssn  char(10) NOT NULL, 
password varchar(40) NOT NULL, 
first_name varchar(30) NOT NULL, 
last_name varchar(30) NOT NULL, 
address  varchar(80) NOT NULL, 
admin_id int REFERENCES users(user_id) 
} engine = InnoDB; 
+0

非常感謝,你的回答和解釋是明確的幫助! – BeeDog 2010-10-28 08:41:50

1

在用戶表中添加admin_userid引用用戶(USER_ID)

這樣一來,每個用戶點返回到用戶表,他們屬於管理員用戶。

使用此專欄時,醫生可以列出他的所有患者,並且可以使用分配表進行預約。

但是,某個用戶總是會與同一位醫生/管理員會面嗎?

假期呢?

+0

感謝您的快速幫助!我沒有真正考慮假期或類似的事情,但感謝提醒我。 :) – BeeDog 2010-10-28 08:45:07

相關問題