2010-04-22 70 views
1

我在理解如何处理我正在编写的程序的数据库末尾时遇到了一些麻烦。我在Kohana中使用了一个ORM,但是我希望对如何解决这个问题有一个广义的理解将会使我得到ORM的答案。数据库设计使用外键的MySQL

我正在为用户编写一个程序来管理他们的股票研究信息。我的表格基本上是这样的:

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中使用连接表。

感谢您的任何帮助,这将帮助我更好地理解问题。

回答

0

你将不得不使用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... 
+0

由于表链接在一起,这就是我想通。我有点希望这是能让我更加接近和使用我正在使用的ORM的东西,但事实并非如此。 – dscher 2010-04-22 05:07:32