2017-09-16 35 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;