В настоящее время я использую следующее решение I найдено в группе google AngularJS.
$http .post('/echo/json/', 'json=' + encodeURIComponent(angular.toJson(data)), { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } }).success(function(data) { $scope.data = data; });
Обратите внимание, что если вы используете PHP, вам нужно будет используйте что-то вроде компонента HTTP Request::createFromGlobals()
Symfony 2 HTTP, чтобы прочитать это, поскольку $ _POST не будет автоматически загружаться с ним.
Право, проблема - Вы, хотят только один объект одного подтипа сослаться на любую данную строку родительского класса. При запуске с пример данный @Jay S, попробуйте это:
create table media_types (
media_type int primary key,
media_name varchar(20)
);
insert into media_types (media_type, media_name) values
(2, 'TV series'),
(3, 'movie');
create table media (
media_id int not null,
media_type not null,
name varchar(100),
description text,
url varchar(255),
primary key (media_id, media_type),
foreign key (media_type)
references media_types (media_type)
);
create table tv_series (
media_id int primary key,
media_type int check (media_type = 2),
season int,
episode int,
airing date,
foreign key (media_id, media_type)
references media (media_id, media_type)
);
create table movies (
media_id int primary key,
media_type int check (media_type = 3),
release_date date,
budget numeric(9,2),
foreign key (media_id, media_type)
references media (media_id, media_type)
);
Это - пример непересекающихся подтипов , упомянул @mike g.
<час>Ре комментирует @Countably Богом и @Peter:
ВСТАВЛЯЮТ в две таблицы, потребовал бы два, вставляют операторы. Но это также верно в SQL любое время, у Вас есть дочерние таблицы. Это - обычная вещь сделать.
ОБНОВЛЕНИЕ может потребовать двух операторов, но некоторые бренды мультитаблицы UPDATE поддержки RDBMS с синтаксисом СОЕДИНЕНИЯ, таким образом, можно сделать это в одном операторе.
При запросах данных, можно сделать это просто путем запросов media
таблица, если Вам только нужна информация об общих столбцах:
SELECT name, url FROM media WHERE media_id = ?
, Если Вы знаете, Вы запрашиваете фильм, можно получить определенную для фильма информацию с единственным соединением:
SELECT m.name, v.release_date
FROM media AS m
INNER JOIN movies AS v USING (media_id)
WHERE m.media_id = ?
, Если Вы хотите информацию для данной записи медиа, и Вы не знаете то, что вводит ее, необходимо было бы соединить со всеми таблицами подтипа, зная, что только одна такая таблица подтипа будет соответствовать:
SELECT m.name, t.episode, v.release_date
FROM media AS m
LEFT OUTER JOIN tv_series AS t USING (media_id)
LEFT OUTER JOIN movies AS v USING (media_id)
WHERE m.media_id = ?
, Если данные медиа будет фильм, то все столбцы в t.*
будут ПУСТЫМИ.
Рассмотрите использование основной таблицы основных данных с таблицами, расширяющимися прочь его со специализированной информацией.
Напр.
basic_data
id int,
name character varying(100),
description text,
url character varying(255)
tv_series
id int,
BDID int, --foreign key to basic_data
season,
episode
airing
movies
id int,
BDID int, --foreign key to basic_data
release_data
budget
Так как Вы отметили этот PostgreSQL, Вы могли посмотреть http://www.postgresql.org/docs/8.1/static/ddl-inherit.html , но остерегаться протестов.
То, что Вы ищете, называют 'непересекающимися подтипами' в реляционном мире. Они не поддерживаются в sql на уровне языка, но могут быть более или менее реализованы сверху sql.
Вы могли составить одну таблицу с основными областями плюс uid затем раздвижные столы с тем же uid для каждого конкретного случая. Для запросов им нравятся отдельные таблицы, Вы могли создать представления.
Используя подход с разделением подтипов, предложенный Биллом Карвином, как бы вы выполняли ВСТАВКИ и ОБНОВЛЕНИЯ, не выполняя их в два этапа?
Получение данных, Я могу представить представление, которое объединяется и выбирает на основе определенного media_type, но, AFAIK, я не могу обновить или вставить в это представление, потому что оно влияет на несколько таблиц (здесь я говорю о MS SQL Server). Можно ли это сделать без выполнения двух операций - и, естественно, без хранимой процедуры.
Спасибо