使用外键的数据库设计 MySQL
Posted
技术标签:
【中文标题】使用外键的数据库设计 MySQL【英文标题】:Database design MySQL using foreign keys 【发布时间】:2010-04-22 04:00:55 【问题描述】:我在理解如何处理我正在制作的程序的数据库端时遇到了一些麻烦。我在 Kohana 中使用 ORM,但我希望对如何解决此问题的一般理解将引导我使用 ORM 得到答案。
我正在为用户编写一个程序来管理他们的股票研究信息。我的表基本上是这样的:
CREATE TABLE tags(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
tags VARCHAR(30),
UNIQUE(tags)
)
ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE stock_tags(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
tag_id INT NOT NULL,
stock_id INT NOT NULL,
FOREIGN KEY (tag_id) REFERENCES tags(id),
FOREIGN KEY(stock_id) REFERENCES stocks(id) ON DELETE CASCADE
)
ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE notes(
id INT AUTO_INCREMENT NOT NULL,
stock_id INT NOT NULL,
notes TEXT NOT NULL,
FOREIGN KEY (stock_id) REFERENCES stocks(id) ON DELETE CASCADE,
PRIMARY KEY(id)
)
ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE links(
id INT AUTO_INCREMENT NOT NULL,
stock_id INT NOT NULL,
links VARCHAR(2083) NOT NULL,
FOREIGN KEY (stock_id) REFERENCES stocks(id) ON DELETE CASCADE,
PRIMARY KEY(id)
)
ENGINE=INNODB DEFAULT CHARSET=utf8;
如何获取单个股票的所有属性,包括其链接、注释和标签?我是否必须在股票表中添加链接、注释和标签列,然后你怎么称呼它?我知道这与使用 ORM 不同,我假设我可以在 SQL 中使用连接表。
感谢您的帮助,这将真正帮助我更好地理解问题。
【问题讨论】:
【参考方案1】:您必须使用JOINS 将表格链接在一起
类似
SELECT *
FROM stocks s INNER JOIN
stock_tags st ON s.id = st.stock_id INNER JOIN
tags t ON st.tag_id = t.id etc...
【讨论】:
谢谢,我就是这么想的。我有点希望它能引导我更多地使用我正在使用的 ORM 并回答它,但事实并非如此。以上是关于使用外键的数据库设计 MySQL的主要内容,如果未能解决你的问题,请参考以下文章