2013-08-16 33 views
2

我在一年前发现了一个问题,它与我在mysql中的数据库结构类似。该问题被发现here在mysql中创建表的困惑

已经提供了答案有意义下表不同的是:

Message_type: message_type_id, description (1:public, 2:friends, 3:specific_recipients) 

有人可以帮助我弄清楚如何创建一个实现(1:public, 2:friends, 3:specific_recipients)属性请表?

编辑

User: user_id, given_name, ... 

Message: message_id, owner_id (fk User), subject, body, posted, message_type_id (fk Message_type)... 

Message_recipients: user_id (fk User), message_id (fk Message) 

Message_type: message_type_id, description (1:public, 2:friends, 3:specific_recipients) 

所以,我想在此基础上实现我的数据库,但我有问题设置它。 第一个问题:message表有一个FK调用message_type_id但如果你看看前面的OP的问题,该字段被称为isPublic,这不是PK。如何在不删除其记录的情况下将isPublic字段更改为FK。我也需要在创建这些表时指定任何UPDATESALTER条件。

+0

关于问题的问题是meta。 – hjpotter92

回答

0

它看起来对我来说,Message_type有两列message_type_iddescription或含有含括号内的值3行,像这样:

message_type_id | description 
----------------+-------------------- 
1    | public 
2    | friends 
3    | specific_recipients 

有写SQL做这几个方面,一个方式(与message_type_id作为主键):

CREATE TABLE Message_type (message_type_id INT NOT NULL PRIMARY KEY, 
          description VARCHAR(100)) 
SELECT 1 AS message_type_id, 'public' AS description 
UNION ALL 
SELECT 2, 'friends' 
UNION ALL 
SELECT 3, 'specific_recipients' 

更多见this

或者:

CREATE TABLE Message_type (message_type_id INT NOT NULL PRIMARY KEY, 
          description VARCHAR(100)); 

INSERT INTO message_type 
VALUES (1, 'public'), (2, 'friends'), (3, 'specific_recipients') 

编辑问题编辑:

如果您已经使用(例如)创建Message表:

CREATE TABLE Message (
    message_id int(10) unsigned NOT NULL auto_increment, 
    isPublic tinyint(4) default '0', 
    PRIMARY KEY (message_id) 
); 

这将取代(一推测布尔)isPublicmessage_type_id

ALTER TABLE Message 
ADD COLUMN message_type_id INT REFERENCES Message_type(message_type_id); 

# classified everything that's not public as friends 
UPDATE Message 
SET message_type_id = CASE WHEN isPublic = 1 THEN 1 
          ELSE 2 
         END; 

ALTER TABLE Message DROP COLUMN isPublic; 
+0

这只是3个'INSERT'语句(或带有3个VALUES列表的一条语句)。有什么问题? – Barmar

+0

@corybaxter,'create table message_type(message_type_id integer primary key,description text)' - 类似的东西,你可以在MySQL文档中找到'create table'命令的语法 – SpongeBobFan

+0

非常感谢你 –