Avatar billede Calle5463 Forsker
21. oktober 2016 - 21:11 Der er 13 kommentarer

Lidt hjælp til strukturering

Jeg har et lille dilemma med lidt strukturering af mine data:

Tre tabeller (mysql) vedrørende givne resourcer delt i hovedgrupper, itemgrupper og enheder
En tabel med persondata (som kun indeholder navn, adr og lignende.)
En tabel, hvor jeg linker enheder med persondata.

En person kan være engageret med flere enheder, men lige nu har jeg programmeret, så en enhed kun kan være linket til en person.

Nu har jeg så brug for, at nogen visse enheder godt kan være linket flere personer men dog et begrænset antal personer, et par enkelte dog i princippet ubegrænset.

Jeg tænker, at oprette et par kolonner i enhedstabellen med resource-antal og allokeret-antal, og så programmere mig ud af resten. (Det ligner jo lidt noget lagerstyring eller noget .....) Og der skal huskes lige at tage højde for hvis resourcemængden ændres nedad under det allokerede antal, men det nu lidt ligetil.

Eller er der en anden måde som er lige ud af landevejen?
Avatar billede arne_v Ekspert
21. oktober 2016 - 21:26 #1
Din link tabel kan fint haandtere M:M.

Du skal helt klart have en resource-antal  kolonne.

Spoergsmaalet er om du skal have en allokeret-antal kolonne eller ej.

Det vol nok goere koden simplere. Men strengt taget er det redundant information, da oplysninger kan findes udfra link tabellen.

Og jeg ville nok forsoege uden.
Avatar billede arne_v Ekspert
21. oktober 2016 - 21:27 #2
To andre aspekter som du skal overveje:
1) har du brug for historik?
2) haandtering af samtidigheds problemer
Avatar billede Calle5463 Forsker
21. oktober 2016 - 22:04 #3
#2

ad 1 - det har jeg ikke helt tænkt til ende, og derfor vil jeg under alle omstændigheder gerne have muligheden, men det behøver ikke være det helt vilde  - tænker det måske kan bygges ind i tabellen der allokere personer med resourcer (dato for aktiveret, status + dato for slut = af-allokering af aftale) Der kommer sikkert også et ønske om handling af udskrivning af bilag til regning evt udsendelse af opkrævning.

ad 2 - der er kun een administrator (+ webmaster), så den tror jeg vi kan lade ligge pt.
Avatar billede Calle5463 Forsker
21. oktober 2016 - 22:12 #4
#1 - at undgå allokeret-antal betyder vist også, at der er færre muligheden for at det går galt med at holde rede på antal allokeringer i forhold til resource. En update af resourceantal skal så bare tage hensyn til at (COUNT) allokerede skal være <= det nye resourcetal. Det er absolut håndterbart.
Avatar billede arne_v Ekspert
22. oktober 2016 - 03:02 #5
Hvis du vaelger at hente fra link tabel og vil have historik ender du med noget a la:

SELCT COUNT(*) FROM link WHERE enhedid=? AND returdato IS NULL
Avatar billede Calle5463 Forsker
22. oktober 2016 - 09:42 #6
#5
Noget i den stil jeg selv tænkte

Min linktabel må også kunne bruges som venteliste for medlemmer der ønsker en resource der ikke er ledig - noget i retning af

SELECT medlemid COUNT(*) FROM link WHERE hovedgrp=?, enhgrp=? enhedid IS NULL

og medlemmer kan anmode via en formular.
Avatar billede Calle5463 Forsker
22. oktober 2016 - 09:44 #7
og medlemmer kan anmode via en formular. og her skal jeg så lige overveje samtidighed ......
Avatar billede Calle5463 Forsker
22. oktober 2016 - 17:57 #8
- men lige nu sidder jeg med en lille udfordring omkring kald af php-fil med parameter, og indrømmet: Jeg har ikke helt overblik over brugen af $_GET, global og static ........

$url = "alloker_engagementer.php?hovedgruppe_id=7&itemgruppe_id=41";
redirect($url);

- og få dem gemt "permanent" i php-filen sålænge den er aktiv. Væriderne kommer godt nok med, men jeg mister indholdet i $_GET og i de variable jeg stopper værdierne ind i .....
Avatar billede arne_v Ekspert
22. oktober 2016 - 19:57 #9
Hvis det skal vaer emuligt at reservere lan du enten lave et felt bestiiltdato i link tabellen eller lave en separat tabel.
Avatar billede arne_v Ekspert
22. oktober 2016 - 19:59 #10
alloker_engagementer.php burde kunne bruge $_GET'hovedgruppe_id'] og $_GET['itemgruppe_id']
Avatar billede Calle5463 Forsker
22. oktober 2016 - 20:43 #11
#10 - jeg får godt nok værdierne med over via $_GET[''], men efter jeg har brugt dem en gang, så er de ikke længere til rådighed som $_GET['']. Derfor har jeg forsøgt mig med at gemme dem i en variabel der ikke bliver slettet når programmet i filen genstartes efter et gennemløb. Det lykkes så heller ikke:


Parse error: syntax error, unexpected '$_GET' (T_VARIABLE) in F:\xampp\htdocs\CER_project\alloker_engagementer.php on line 148

147: $hovedgruppe_id = $_GET['hovedgruppe_id'];
148: Static $itemgruppe_id = $_GET['itemgruppe_id'];
Avatar billede arne_v Ekspert
22. oktober 2016 - 21:03 #12
Maa vi se lidt flere linier omkring 147 og 148?
Avatar billede Calle5463 Forsker
22. oktober 2016 - 21:17 #13
#12 - det fungere, når jeg bruger de hard-kodede værdier, som i eksemplet er //


<FORM method='POST'>
    <br>Tilbage til menuen - <input type='submit' id='menuknap' name='knap' value='menu'>
</FORM>

<?php
// --------------------------------------------------------------------------------------------------------------------

echo "<br> A) hvdgrp: " . $_GET['hovedgruppe_id'] . ", itemgrp:  " . $_GET['itemgruppe_id'];

$hovedgruppe_id = $_GET['hovedgruppe_id'];
Static $itemgruppe_id = $_GET['itemgruppe_id'];

// $hovedgruppe_id = 7;
// $itemgruppe_id = 42;


$vis_medlems_arrangement = "";
$url = "";

if(isset($_POST['knap'])) {
    if($_POST['knap'] == 'menu') {
        // echo "<br> Gå tilbage til menu";
        $url = "CER_project_MDB.php";
        redirect($url);
    }
       
    if($_POST['knap'] == 'Opret aftale') {
        if($_POST['medlemmerslist']>=0 && $_POST['itemlist']>0) {
            $mysqli = forbind_til_database();
            ny_record($mysqli, $_POST['medlemmerslist'], $hovedgruppe_id, $_POST['itemlist']);
            $mysqli->close();
            } elseif($_POST['medlemmerslist']>=0 && $_POST['itemlist']==0) {
                echo "skal vise liste med valgt medlems engagementer";
                $vis_medlems_arrangement = "vis";
                } else {
                echo "mangler data";
        }
    }       

}

$mysqli = forbind_til_database();
vis($mysqli, $hovedgruppe_id, $itemgruppe_id);
if($vis_medlems_arrangement == "vis") {vis_medlems_records($mysqli, $_POST['medlemmerslist']);}
$mysqli->close();   
   
?>

<FORM method='POST'>
    <br>Tilbage til menuen - <input type='submit' id='menuknap' name='knap' value='menu'>
</FORM>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester