如何设置两个MySQL数据字段,以便一个或另一个可以为null但不能同时为两个?

时间:2013-02-03 02:31:44

标签: mysql sql phpmyadmin

我有5个MySQL数据字段用于投票表:

  • post id
  • 民意调查ID
  • 投票ID
  • 选举人
  • voteid

您可以投票或投票支持投票。如果您在投票中投票,则帖子/人员字段将为空。如果您投票支持帖子,则投票字段将为空。

我想设置表格,这样你就可以将帖子ID或投票ID设为null,但不能同时设置两者。我正在使用phpmyadmin来管理我的数据库。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我必须同意jmilloy以上最好的事情是创建单独的表。这是一个如何工作的例子:

表结构和样本数据:

CREATE TABLE post (
    post_id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT
 );

CREATE TABLE poll (
    poll_id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT
  );

CREATE TABLE voter(
  vote_id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(30)
  );

INSERT INTO post (vote_id) VALUES(1),(2),(3),(6);

INSERT INTO poll (vote_id) VALUES(3),(5),(4),(7);

INSERT INTO voter(name) VALUES ('bob'),
('Jack'),
('Joe'),
('Shara'), 
('Hillary'), 
('Steven'), 
('Sandra');

要检索投票支持投票的选民,您必须使用加入。这是一个例子,如果你想找到一个2号的选民,这会是什么样子。

SELECT post.post_id, vote.name  
FROM (post 
 JOIN post_vote 
ON post_vote.post_id = post.post_id) 
 JOIN vote 
ON vote.vote_id = post_vote.vote_id
WHERE post.post_id = 2;

SQL FIDDLE DEMO

如果您进行投票和投票,您有多对多的关系,即一个选民可以投票支持多个投票,一个民意调查可以有多个投票人。要在投票和民意调查表之间架起桥梁,请使用桥接表。此表包含所有投票号和投票组合。因此,当您想知道谁投票给某个特定的投票时,您需要将poll_id与poll_vote表中的poll_id相关联。然后使用poll_vote表和投票表中的vote_id将结果与投票表进行匹配。希望这可以帮助。祝你的项目好运。

答案 1 :(得分:0)

查看MySQL CREATE TABLE语法http://dev.mysql.com/doc/refman/5.1/en/create-table.html

请注意,NOT NULL或NULL是列定义的一部分。默认值为NULL。这只能应用于列,而不是列对。

这里的解决方案是制作两个单独的表,一个用于投票,一个用于投票。然后,您可以将相关字段放在每个表中。这也将节省您的空间,并使您的数据不易出错。