2017-09-16 40 views
0

我需要構建一個MySQL表。 我有桌子:武器,盔甲,垃圾。 它們都有主鍵:idweapon, idarmor, idtrash只填充MySQL上的一列

我需要建立保存每一個項目表,所以這個表應該是這樣的:

iddatabase (pk) 
idweapon(fk) 
idarmor(fk) 
idtrash(fk) 

我怎樣才能知道,只有三個後來的一列可以填充數據庫?

回答

2

假設你正在使用整數爲每個鍵(它們都是同一類型),嘗試這樣的,而不是一個模式:

 
iddatabase(pk) 
iditem 
itemtype 
+0

是的,一切都是整數,因爲他們指的是從其它表的ID。 但是,請幫助我理解這一點。 我會在這裏有其他表格的id,所以會有很多'iditem',值爲'1'。 例如: 0,0,裝甲 0,1,裝甲 0,0,武器 0,0,垃圾 這不會有什麼問題? – RicRev

+1

而不是每個項目類型的separte列,您有一列可以容納來自任何表的外鍵,並有一列告訴你它屬於哪個表。 –

+0

我會嘗試做一個腳本來填補這一點。感謝您的建議。這是我的第一個想法,但是我的老師告訴我由於某種原因劃傷它。無論如何我會這樣做,並向她解釋這將如何工作。 – RicRev

1

「我怎麼能告訴數據庫,只有中的一個三個以後的專欄可以填充?「對我來說,你只需要三列中的一列能夠保存一個值,而另外兩列必須爲NULL。

如果是這樣,一個觸發器可以實現這一點:

DELIMITER // 
CREATE TRIGGER myTrigger 
BEFORE INSERT ON your_table 
FOR EACH ROW 
BEGIN 

    IF NOT((NEW.idweapon IS NOT NULL AND NEW.idarmor IS NULL AND NEW.idtrash IS NULL) OR 
      (NEW.idarmor IS NOT NULL AND NEW.idweapon IS NULL AND NEW.idtrash IS NULL) OR 
      (NEW.idtrash IS NOT NULL AND NEW.idweapon IS NULL AND NEW.idarmor IS NULL)) THEN 
       SIGNAL SQLSTATE '45000' 
       SET MESSAGE_TEXT = 'Only one column should have a value'; 
    END IF; 

END;