2014-04-01 1 views
0

시험 준비 중이고 필자가 작성한 예제 작업을하기로 결정했지만 특정 경우에만 붙어 있습니다. 관계. 나는 약간의 진전없이 3-4 시간 동안 SQL의 벽에 머리를 댄다. 나는 일대일 방식과 일대 다 방식의 관계를 생성하고자하는 2 개의 테이블을 가지고 있습니다.MySQL의 테이블 간의 일대일 및 일대 다 관계 만들기

CREATE TABLE article (
    price INT(30) NOT NULL, 
    published_on DATE NOT NULL 
); 

CREATE TABLE tag(
    descption VARCHAR(30) NOT NULL, 
    priority INT(30) NOT NULL 
); 

CREATE TABLE category(
    date_created_on DATE NOT NULL, 
    name VARCHAR(30) NOT NULL 
); 

INSERT INTO article VALUES (10.0, "2001-01-01", 0); 
INSERT INTO article VALUES (20.0, "1992-05-08", 0); 

INSERT INTO tag VALUES ("wtf", 1, 1); 
INSERT INTO tag VALUES ("is this", 2, 2); 

ALTER TABLE article ADD article_id INT(30) NOT NULL; 
ALTER TABLE article ADD PRIMARY KEY(article_id); 
ALTER TABLE article MODIFY article_id AUTO_INCREMENT; 

ALTER TABLE tag ADD tag_id INT(30) NOT NULL; 
ALTER TABLE tag ADD PRIMARY KEY(tag_id); 
ALTER TABLE tag MODIFY tag_id AUTO_INCREMENT; 

ALTER TABLE tag ADD FOREIGN KEY (tag_id) REFERENCES (article_id); 

나는 한 기사는 기사 하나에 하나를 가질 수 있도록, 그것을 만들기 위해 다음 그렇게 기사 카테고리 많은에 하나를 가지고 있는지 확인하고 싶습니다. 나는 하나에서 많은 것을 시도하기 위해 일대일을 할 수 없습니다. 어떻게하면 좋을지, 관계가 어떻게 작동 할 것인가에 대한 통찰력을 좀 주시겠습니까? 여기

는 데이터베이스 내부에서 정보입니다 -

mysql> select * from Tag; 
+-------------+----------+--------+ 
| description | priority | tag_id | 
+-------------+----------+--------+ 
| wtf   |  1 |  1 | 
| is this  |  2 |  2 | 
+-------------+----------+--------+ 

mysql> select * from Article; 
+-------+--------------+------------+ 
| price | published_on | article_id | 
+-------+--------------+------------+ 
| 10 | 2001-01-01 |   7 | 
| 20 | 1992-05-08 |   8 | 
+-------+--------------+------------+ 

mysql> describe Article; 
+--------------+---------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+---------------+------+-----+---------+----------------+ 
| price  | decimal(30,0) | YES |  | NULL |    | 
| published_on | date   | YES |  | NULL |    | 
| article_id | int(30)  | NO | PRI | NULL | auto_increment | 
+--------------+---------------+------+-----+---------+----------------+ 

mysql> describe Tag; 
+-------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-------------+-------------+------+-----+---------+-------+ 
| description | varchar(30) | NO |  | NULL |  | 
| priority | int(30)  | NO |  | NULL |  | 
| tag_id  | int(30)  | NO | PRI | NULL |  | 
+-------------+-------------+------+-----+---------+-------+ mysql> select * from Tag; 
+-------------+----------+--------+ 
| description | priority | tag_id | 
+-------------+----------+--------+ 
| wtf   |  1 |  1 | 
| is this  |  2 |  2 | 
+-------------+----------+--------+ 

mysql> select * from Article; 
+-------+--------------+------------+ 
| price | published_on | article_id | 
+-------+--------------+------------+ 
| 10 | 2001-01-01 |   7 | 
| 20 | 1992-05-08 |   8 | 
+-------+--------------+------------+ 

mysql> describe Article; 
+--------------+---------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+---------------+------+-----+---------+----------------+ 
| price  | decimal(30,0) | YES |  | NULL |    | 
| published_on | date   | YES |  | NULL |    | 
| article_id | int(30)  | NO | PRI | NULL | auto_increment | 
+--------------+---------------+------+-----+---------+----------------+ 

mysql> describe Tag; 
+-------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-------------+-------------+------+-----+---------+-------+ 
| description | varchar(30) | NO |  | NULL |  | 
| priority | int(30)  | NO |  | NULL |  | 
| tag_id  | int(30)  | NO | PRI | NULL |  | 
+-------------+-------------+------+-----+---------+-------+ 

그리고 이것은 내가 외래 키 생성을위한 얻을 오류입니다 :

mysql> ALTER TABLE Tag ADD FOREIGN KEY(tag_id) REFERENCES Article(article_id); 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`exam_example`.`#sql-2836_1`, 
CONSTRAINT `#sql-2836_1_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `Article` (`article_id`)) 
+1

SQL은 두 개의 테이블'category'와'tag'를 생성하지만,'INSERT'와'ALTER' 문장은'article' 테이블을 참조하고 있습니다. 또한'CREATE' 문으로'ALTER' 문을 굴려 보는 것이 어떻습니까? – deanosaur

+0

@deanosaur 공정한 포인트. 나는 나의 진술을 연습하고있다. 내가 처음부터 거기에있는 열쇠없이 일대일 일을 할 수 있어야한다고 생각합니다. 당신이 그것이 내가 그들을 둔 곳에 변화를 줄 것이라고 생각합니까? –

+0

문제의 매개 변수가 정확히 무엇인지 조금 더 설명해 주시겠습니까? 나는 너를 도울 수 있을지도 모르지만 나는 아직도 그 질문이 무엇인지 100 % 명확하지 않다. – user3485980

답변

1
CREATE TABLE article (
    price INT(30) NOT NULL, 
    published_on DATE NOT NULL, 
    article_id INT(30) NOT NULL, 
    CONSTRAINT pk_article_id PRIMARY KEY(article_id) 
); 

CREATE TABLE tag(
    descption VARCHAR(30) NOT NULL, 
    priority INT(30) NOT NULL, 
    tag_id INT(30) NOT NULL, 
    CONSTRAINT pk_tag_article PRIMARY KEY(tag_id), 
    CONSTRAINT fk_tag_article FOREIGN KEY(tag_id) REFERENCES article(article_id) 
); 

INSERT INTO article VALUES (10.0, "2001-01-01", 0); 
INSERT INTO article VALUES (20.0, "1992-05-08", 1); 

INSERT INTO tag VALUES ("wtf", 1, 1); 
INSERT INTO tag VALUES ("is this", 2, 2); 

이 하나 하나에 대한 관계를 .

태그의 기본 키가 기사에서 같다고 말합니다.