Array
(
)

Cadastrar uma receita no Sql Server

Leandro Portugal
   - 20 jan 2016

Boa noite pessoal, eu preciso de ajuda para no minimo ter uma luz de como proceder.
Eu tenho esses dados:
Receita (Clique na imagem para abrir em uma nova janela)
Como vocês podem ver é uma receita, onde eu tenho a lista de ingredientes com suas respectivas unidades de medidas e quanto é usado e o valor correspondente e a somo total do valor no final. Não consegui pensar como seria essa tabela. Alguém pode me ajudar?

Camilo Silva
   - 20 jan 2016

Olá Leandro,

Acredito que seria interessante a criação de duas tabelas. Uma referênciando a receita e outra para as especificações dos ingredientes referênciando a qual receita esses componentes pertencem.

Exemplo:

Tabela_Receita = chave_primária, nome_receita;
Tabela_Ingredientes = chave_primária, chave_estrangeira_tabela_recceita, ingrediente, medida, preco_por_medida, quantidade, gasto_total;

Leandro Portugal
   - 20 jan 2016

Camilo foi mais ou menos o que eu pensei, só que não tinha muita certeza se estava certo ou não.

seria algo como isso?

CREATE TABLE PRODUTOS(

ID_PRODUTOS INT IDENTITY (1,1) NOT NULL
,NOMEPRODUTO VARCHAR (100)
CONSTRAINT PK_ID_PRODUTOS PRIMARY KEY (ID_PRODUTOS)

);

CREATE TABLE INGREDIENTES(

ID_INGREDIENTES INT IDENTITY (1,1) NOT NULL
,INGREDIENTES // QUAL TIPO DEVO USAR VARCHAR OU OUTRA COISA?
,MEDIDA_INGREDIENTE VARCHAR (20)
,PRECOMEDIDA_INGREDIENTE DECIMAL (18, 2)
,QUANTIDADE_INGREDIENTE FLOAT
,GASTOTOTAL_INGREDIENTES DECIMAL (18, 2)

CONSTRAINT PK_ID_INGREDIENTES PRIMARY KEY (ID_INGREDIENTES)
FOREIGN KEY ([ID_PRODUTOS]) REFERENCES [PRODUTOS] ([ID_PRODUTOS])

);

Camilo Silva
   - 20 jan 2016

Exatamente,

Seguindo esse SQL que você montou.

Quanto a questão da coluna Ingredientes você pode utilizar o próprio VARCHAR tentando projetar o máximo de caracteres que serão utilizados. Você pode utilizar também o tipo de dado TEXT que teóricamente não tem limite de caracteres. Pessoalmente eu escolheria o VARCHAR.

Leandro Portugal
   - 20 jan 2016

A minha ideia é em cada índice do vetor eu salvar um palavra, acha que seria uma boa? pois depois precisarei recuperar essas informações em forma de tabela em um datagrid.

Camilo Silva
   - 20 jan 2016

Qual é a linguagem que vocẽ está usando?

Leandro Portugal
   - 20 jan 2016

Estou usando C#

Camilo Silva
   - 20 jan 2016

Entendi,

Não sou muito bom e C#, porém em Java já fiz algumas coisas nesse sentido.

Quando eu fosse montar a grid eu instanciaria um List do tipo Receita resultando em algo do tipo => List<Receita> receitas = conection.selectReceitas();
Cada indice do vetor seria um objeto do tipo Receita, ou seja, cada linha seria abstraida em um objeto dentro do meu List.

Em C# deve haver alguma alternativa dessas

Leandro Portugal
   - 20 jan 2016

Tem sim, cara muito obrigado por ter me ajudado. Eu estava com a ideia certa só não tinha certeza. Você me ajudou muito a ter uma noção de como prosseguir.

Camilo Silva
   - 20 jan 2016

Imagina cara, precisando estamos ai.

Leandro Portugal
   - 20 jan 2016

Da uma olhada nesse SQL

--CATEGORIA DE PRODUTOS(NOME,CÓDIGO(ID))
--MATERIAS PRIMAS (NOME, CÓDIGO(ID), MEDIDA, PREÇO)
--EMBALAGENS (NOME,VOLUME, UNIDADES CÓDIGO (ID), PREÇO)
--ETIQUETAS (NOME, CÓDIGO (ID), PREÇO)
--CUSTOS (MATERIA PRIMA, EMBALAGEM, MATERIA GRAFICO, VARIAVEL TOTAL,PREÇO DE VENDA,MARGEM DE CONTRIBUIÇÃO, MARGEM DE CONTRIBUIÇÃO PERCENTUAL)
--PRODUTOS ()
--CRIA O BANCO DE DADOS
CREATE DATABASE GESTAODECUSTOS
GO
USE GESTAODECUSTOS
GO

--CRIA A TABELA CATEGORIAS
CREATE TABLE CATEGORIAS(

ID_CODIGOCATEGORIA INT IDENTITY (1,1) NOT NULL
,NOME_CATEGORIA VARCHAR (100)
CONSTRAINT PK_ID_CODIGOCATEGORIA PRIMARY KEY (ID_CODIGOCATEGORIA)

);
--CRIA A TABELA MATERIA PRIMA
CREATE TABLE MATERIAPRIMA(

ID_MATERIAPRIMA INT IDENTITY (1,1) NOT NULL
,NOME_MATERIAPRIMA VARCHAR (100)
,MEDIDA_MATERIAPRIMA VARCHAR (20)
,PRECO_MATERIAPRIMA DECIMAL (18, 2)
CONSTRAINT PK_ID_MATERIAPRIMA PRIMARY KEY (ID_MATERIAPRIMA)

);
--CRIA A TABELA EMBALAGENS
CREATE TABLE EMBALAGENS(

ID_EMBALAGENS INT IDENTITY (1,1) NOT NULL
,NOME_EMBALAGENS VARCHAR (100)
,VOLUME_EMBALAGENS VARCHAR (50)
,UNIDADES_EMBALAGENS INT
,PRECO_EMBALAGENS DECIMAL (18, 2)
CONSTRAINT PK_ID_EMBALAGENS PRIMARY KEY(ID_EMBALAGENS)
);
--CRIA A TABELA ETIQUETAS
CREATE TABLE ETIQUETAS(

ID_ETIQUETAS INT IDENTITY (1,1) NOT NULL
,NOME_ETIQUETA VARCHAR (100)
,PRECO_ETIQUETA DECIMAL (18, 2)
CONSTRAINT PK_ID_ETIQUETAS PRIMARY KEY(ID_ETIQUETAS)
);
--CRIA A TABELA CUSTOS
CREATE TABLE CUSTOS(

ID_CUSTOS INT IDENTITY (1,1) NOT NULL
,CUSTO_MATERIAPRIMA DECIMAL (18, 2)
,EMBALAGEM VARCHAR (100)
,CUSTO_EMBALAGEM DECIMAL (18, 2)
,CUSTO_ETIQUETAS DECIMAL (18, 2)
,CUSTOVARIAVELTOTAL DECIMAL(18, 2)
,PRECOVENDA DECIMAL (18, 2)
,MARGEMCONTRIBUICAO DECIMAL (18, 2)
,MARGEMCONTRIBUICAOPERCENTUAL FLOAT
,
);
--CRIA A TABELA PRODUTOS
CREATE TABLE PRODUTOS(

ID_PRODUTOS INT IDENTITY (1,1) NOT NULL
,NOMEPRODUTO VARCHAR (100)
CONSTRAINT PK_ID_PRODUTOS PRIMARY KEY (ID_PRODUTOS)
);

--CRIA TABELA
CREATE TABLE INGREDIENTES(

ID_INGREDIENTES INT IDENTITY (1,1) NOT NULL
,INGREDIENTES VARCHAR (100)
,MEDIDA_INGREDIENTE VARCHAR (20)
,PRECOMEDIDA_INGREDIENTE DECIMAL (18, 2)
,QUANTIDADE_INGREDIENTE FLOAT

CONSTRAINT PK_ID_INGREDIENTES PRIMARY KEY (ID_INGREDIENTES)
FOREIGN KEY ([ID_INGREDIENTES]) REFERENCES [PRODUTOS] ([ID_PRODUTOS])
);

Camilo Silva
   - 20 jan 2016

As duas últimas são referentes a receita e aos ingredientes?
Ao meu ver está tudo correto.

Leandro Portugal
   - 20 jan 2016

Exatamente, as duas ultimas são referente aos ingredientes e a receita em si.