2016-02-09 3 views
0


Я новичок в PostgreSQL, и я изо всех сил пытаюсь понять, как использовать ссылку на «экземпляр» (или строку) из таблицы как значение внутри строки другой таблицы.Ссылка на строку из другой таблицы (PostgreSQL)

Вот мой желаемый результат:

class User{ 
    int age; 
    Post[] posts; 
} 

class Post{ 
    int postId; 
    ... 
} 

// Sql script 
sqlMain{ 
    User k = new User(20); 
    k.addPost(10, ...); 
} 

Как вы можете видеть, Я хочу (динамический prefereably, как ArrayList) массив сообщений в качестве атрибута пользователя.

До сих пор у меня есть следующий сценарий:

CREATE TABLE Post(
    postId INT 
) 

CREATE TABLE User(
    id INT, 
    posts Post[] 
) 

// Member function of User class 
CREATE FUNCTION addPost(postId int) ... 

В PostgreSQL является ORDBMS, я прав предположить следующий подход будет возможно

(SELECT *row* FROM User WHERE id = 10).addPost(20) 

Заранее спасибо

+0

Пожалуйста, дайте мне знать, если мой ответ поможет вам. – Roland

+0

Ваш ответ не касался моего вопроса. – Andy

ответ

1

Если я правильно вас понимаю, вы должны прочитать об основных понятиях реляционных баз данных (то есть http://www3.ntu.edu.sg/home/ehchua/programming/sql/relational_database_design.html). Ваши таблицы должны выглядеть следующим образом:

CREATE TABLE post(
    post_id INT, 
    user_id INT 
); 

CREATE TABLE user (
    user_id INT 
); 

Это в основном отношения один-ко-многим между пользователем и постом, а это означает, что один пользователь может иметь много постов. Если вы хотите, чтобы все сообщения пользователя (в данном случае пользователь с идентификатором 1), вы можете получить их, как это:

SELECT * FROM user u 
LEFT JOIN post p ON u.user_id = p.user_id 
WHERE user_id = 1; 

Как я могу видеть в вашем вопросе, вы можете отобразить результат на объект-ориентированная модель. Это зависит от технологии/языка, который вы используете. Большинство технологий предлагают библиотеки для подключения к системам баз данных, таким как PostgreSQL, открывать и закрывать запросы на запуск соединений и возвращать результаты. В этом случае вы должны сами сопоставить результаты. Но есть и продвинутые карты, такие как hibernate, которые пытаются сделать эту работу для вас. Но чтобы использовать их, вы должны хорошо знать технологии «под капотом».

+0

Это мало/не имеет отношения к реляционным базам данных – Andy